/* 
 * File:   Triangle.h
 * Author: Piotrek
 *
 * Created on 24 kwiecień 2010, 19:21
 */

#ifndef _TRIANGLE_H
#define	_TRIANGLE_H

#include "Vertex.h"

/**
 * @brief
 * Klasa reprezentujaca trojkat (3 wierzcholki i normalna)
 *
 * Do potrzeb modelu matematycznego kazdy trojkat sklada sie ze skladowych zerowych
 * (normal0, vertex0[3]) oraz skladowych rzeczywistych (normal, vertex).
 * Tworzac model przeksztalcamy wspolrzedne zerowe tak aby znalazly sie w poczatku ukladu wspolrzednych,
 * w petli glownej przeksztalcamy wspolrzedne rzeczywiste i na ich podstawie dokonujemy estymacji.
 * Wspolrzedne trojkatow normalnych sa liczone za kazdym razem na podstawie trojkatow zerowych,
 * ktore znajduja sie w poczatku ukladu wspolrzednych.
 */
class Triangle
{
	public:
        /// normalna rzeczywista
	Vertex normal;
        /// normalna zerowa
        Vertex normal0;
        /// wierzcholki rzeczywiste
	Vertex vertex[3];
        /// wierzcholki zerowe
        Vertex vertex0[3];

        /**
		 * Konstruktor na podstawie 3 tablic ze wspolrzednymi x=[v0x, v1x, v2x], ...
         * @param n[]   wspolrzedne normalnej (x,y,z)
         * @param x[], y[], z[]  wspolrzedne kolejnych wierzcholkow
         */
	Triangle(float n[], float x[], float y[], float z[]);

	/**
	 * Konstruktor na podstawie 3 tablic ze wspolrzednymi v0=[v0x, v0y, v0z], ...
	 * @param n[]   wspolrzedne normalnej (x,y,z)
     * @param v0[], v1[], v2[]  wspolrzedne kolejnych wierzcholkow
	 * @param direction kierunek normalnej (1 -na zewnatrz, -1 -do srodka)
	 */
	Triangle(float n[], float v0[], float v1[], float v2[], int direction);
	
};

#endif	/* _TRIANGLE_H */

